package com.atguigu.yygh.hosp.result;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * 作为接口的公共返回结果
 */
@ApiModel(value = "公共的返回结果类")
@Data
public class R {
    @ApiModelProperty(value = "自定义响应状态码,20000表示成功,20001表示失败")
    private Integer code; //尚医通项目中,定义20000表示成功,20001表示失败
    @ApiModelProperty(value = "自定义的响应信息")
    private String message;
    @ApiModelProperty(value = "true:成功,false:失败")
    private boolean success;
    @ApiModelProperty(value = "负责存储业务数据")
    private Map<String,Object> data=new HashMap<>();//业务数据,封装成k-v存入到map中,例如rows:list total:10
    //有几组值就将几组值存入map中
    //静态方法返回一个默认的r对象,表示操作成功,data中暂时没有数据
    public static R ok(){
        R r = new R();
        r.setCode(ResultCode.SUCCESS);
        r.setMessage("操作成功");
        r.setSuccess(true);
        //r.setData();
        return r;
    }
    public static R error(){
        R r=new R();
        r.setCode(ResultCode.ERROR);
        r.setMessage("操作失败");
        r.setSuccess(false);
        //r.setData();
        return r;
    }

    //非static的方法,需要通过实例对象去调用
    public R data(Map<String,Object> map){
        //将map赋值给当前r对象的data属性(r对象指的是用于调用该data方法的实例对象)
        this.setData(map);
        return this;
    }

    public R data(String key,Object value){
        this.getData().put(key, value);
        return this;
    }

    //更新r对象中的message属性值,并且最后返回r对象

    public R message(String message){
        this.setMessage(message);
        return this;
    }

    public R code(Integer code){
        this.setCode(code);
        return this;
    }

    public R success(boolean success){
        this.setSuccess(success);
        return this;
    }
}
